package edu.ensmp.ckEditor.control;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Point2D;

import edu.ensmp.ckEditor.ckModel.CKModel;
import edu.ensmp.ckEditor.ckModel.CKModel.Concept;
import edu.ensmp.ckEditor.ckModel.CKModel.Knowledge;
import edu.ensmp.ckEditor.gui.EditorFrame;
import edu.ensmp.ckEditor.gui.GraphPanel;
import edu.uci.ics.jung.algorithms.layout.GraphElementAccessor;
import edu.uci.ics.jung.visualization.VisualizationViewer;

public class PanelMouseListener<V, E> implements MouseListener {
	
	private CKModel _modele;
	private EditorFrame _frame;
	
	
	public PanelMouseListener(CKModel modele, EditorFrame frame){
		this._modele = modele;
		this._frame = frame;
	}

	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub

		final VisualizationViewer<V, E> vv = (VisualizationViewer<V, E>) e.getSource();
		
		Point2D p = e.getPoint();
		System.out.println(p.toString());
		GraphElementAccessor<V, E> pickSupport = vv.getPickSupport();
		
		if (pickSupport != null) {
			final V v = pickSupport.getVertex(vv.getGraphLayout(), p.getX(), p
					.getY());
			
			if ( v != null){
				
				if (v.getClass() == Concept.class){
					Concept c = (Concept) v;
					
					// on saisit l'indice du vertex courant pour pouvoir le modifier ensuite et 
					// on met -1 dans l'autre pour specifier qu'il n'est pas utiliser
					_modele.setIndiceC(c.getIndex());
					_modele.setIndiceK(-1);
					
					_frame.getPnlC().setConceptField(c.getProposition());
					
				} else if( v.getClass() == Knowledge.class){
					Knowledge k = (Knowledge) v;
					
					// on saisit l'indice du vertex courant pour pouvoir le modifier ensuite et 
					// on met -1 dans l'autre pour specifier qu'il n'est pas utiliser
					_modele.setIndiceK(k.getIndex());
					_modele.setIndiceC(-1);
					
					_frame.getPnlC().setConceptField(k.getProposition());
				}
				
			}
		}
	}

	
	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
	}

	
	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
	}

	
	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
	}

	
	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub

	}

}
